package cn.edu.wynu.apis.collections.app;

/**
 * 学生实体类
 * 实现JavaBean规范，包含学号、姓名、年龄、班级、成绩等属性
 */
public class Student {
    private String id;        // 学号（唯一标识）
    private String name;      // 姓名
    private int age;          // 年龄
    private String classId;   // 班级编号
    private double score;     // 成绩

    /**
     * 无参构造方法
     */
    public Student() {
    }

    /**
     * 全参构造方法
     * @param id 学号
     * @param name 姓名
     * @param age 年龄
     * @param classId 班级编号
     * @param score 成绩
     */
    public Student(String id, String name, int age, String classId, double score) {
        this.id = id;
        this.name = name;
        this.age = age;
        this.classId = classId;
        this.score = score;
    }

    // Getter和Setter方法
    public String getId() {
        return id;
    }

    public void setId(String id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    public String getClassId() {
        return classId;
    }

    public void setClassId(String classId) {
        this.classId = classId;
    }

    public double getScore() {
        return score;
    }

    public void setScore(double score) {
        this.score = score;
    }

    /**
     * 重写toString方法，格式化输出学生信息
     * @return 格式化的学生信息字符串
     */
    @Override
    public String toString() {
        return String.format("学号=%s, 姓名=%s, 年龄=%d, 班级=%s, 成绩=%.1f", 
                           id, name, age, classId, score);
    }

    /**
     * 重写equals方法，基于学号判断学生是否相等
     * @param obj 比较对象
     * @return 是否相等
     */
    @Override
    public boolean equals(Object obj) {
        if (this == obj) return true;
        if (obj == null || getClass() != obj.getClass()) return false;
        Student student = (Student) obj;
        return id.equals(student.id);
    }

    /**
     * 重写hashCode方法，基于学号生成哈希值
     * @return 哈希值
     */
    @Override
    public int hashCode() {
        return id.hashCode();
    }
}